const jwt = require('express-jwt');
const jwtSign = require('jsonwebtoken').sign;
const jwtVerify = require('jsonwebtoken').verify;
const axios = require('axios');
const FormData = require('form-data');
const path = require('path');
const fs = require('fs');
// const jwt = require('express-jwt');
// const jwtSign = require('jsonwebtoken').sign;
// const jwtVerify = require('jsonwebtoken').verify;

const secretKey = 'your_secret_key';


// 用户数据存储路径
const USERS_FILE = path.join(__dirname, 'users.json')
// !fs.existsSync(USERS_FILE) && fs.mkdirSync(USERS_FILE, { recursive: true });

// 正确的异步初始化函数
async function initUsersFile() {
    try {
      // 使用 await 等待文件读取
      await fs.readFile(USERS_FILE, (err,b) => {
        // console.log('aaa',err,b)
        if(err !== null) {
            fs.writeFile(USERS_FILE, '[]', () => {});
        }
      });
      console.log('users.json 已存在');
    } catch (err) {
      if (err.code === 'ENOENT') {
        // 文件不存在时创建新文件
        await fs.writeFile(USERS_FILE, '[]'); // 写入空数组
        console.log('users.json 已创建');
      } else {
        throw err; // 其他错误重新抛出
      }
    }
  };
  
  
    // 调用时使用 async 包装
    (async () => {
        try {
          await initUsersFile();
          console.log('文件初始化完成');
        } catch (err) {
          console.error('初始化失败:', err);
        }
      })();


// 读取现有用户
let users = []
   
module.exports = function (app, response) {



    // 注册接口
    app.post('/note/register', async (req, res) => {
        try {
            const { username, password } = req.body
            
            // 参数校验
            if (!username || !password) {
                return res.status(400).json({ code: 400, message: '用户名和密码必填' })
            }
        

            try {
                  fs.readFile(USERS_FILE, 'utf8', (err, data) => {
                    console.log('bbb', err, data)
                    if(err === null) {
                        // 检查用户是否已存在
                        const exists = users.some(user => user.username === username)
                        if (exists) {
                            return res.status(409).json({ code: 409, message: '用户名已存在' })
                        }

                        // 生成用户ID (简易递增)
                        const newUser = {
                            id: users.length + 1,
                            username,
                            password, // 实际项目必须加密存储！
                            createTime: new Date().toISOString()
                        }

                        // 保存用户
                        users.push(newUser)
                        fs.writeFile(USERS_FILE, JSON.stringify(users, null, 2), (err2, data2) => {
                            console.log('aaa', err2, data2)
                            if(err2 === null) {
                                // 返回用户信息（排除密码）
                                const { password: _, ...userData } = newUser
                                res.json({ code: 200, data: userData })
                            } else {
                                res.status(500).json({ code: 500, message: '服务器错误2' })
                            }
                        })


                    } else {
                        res.status(500).json({ code: 500, message: '服务器错误3' })
                    }
                })
            } catch (err) {
                // 文件不存在时创建空数组
                if (err.code === 'ENOENT') users = []
                else throw err
            }
        
           
    
        } catch (err) {
            console.error('注册失败:', err)
            res.status(500).json({ code: 500, message: '服务器错误1' })
        }
    })
    
    // 登录接口
    app.post('/note/login', async (req, res) => {
        try {
            const { username, password } = req.body
        
            // 读取用户数据
            let users = []
            try {
                const data = await fs.readFile(USERS_FILE, 'utf8', (err, data) => {
                    console.log('111', err, data)
                    if(err === null) {
                        // fs.writeFile(USERS_FILE, '[]', () => {});
                        users = JSON.parse(data)


                        // 查找用户
                        const user = users.find(u => 
                            u.username === username && u.password === password
                        )
                    
                        if (!user) {
                            return res.status(401).json({ code: 401, message: '用户名或密码错误' })
                        }
                    
                        // 返回用户信息（排除密码）
                        
                        const { password: _, ...userData } = user
                        const token = jwtSign({ username: userData.username }, secretKey, { expiresIn: '24h' });
                        
                        // res.json({ code: 200, data: {
                        //     token
                        // } });
                        res.json({ code: 200, data: {
                            ...userData,
                            token
                        } })

                    } else {
                        return res.status(401).json({ code: 401, message: '用户名或密码错误' }) 
                    }
                    
                })
                console.log('data', data, username, password)
                
            } catch (err) {
                if (err.code === 'ENOENT') users = []
                else throw err
            }
        
            
    
        } catch (err) {
        console.error('登录失败:', err)
        res.status(500).json({ code: 500, message: '服务器错误' })
        }
    })



    // 错误处理中间件（处理其他可能的错误）
 // 错误处理中间件（处理JWT验证失败的情况）
    app.use((err, req, res, next) => {
        console.log('err.name', err.name)
        if (err.name === 'UnauthorizedError') {
           res.status(401).json({ message: 'Invalid or expired token' });
        } else {
           next(err);
        }
    });
}